package com.neko.Thread_Learning;

/** 7、静态代理 模式
 * ---------------------
 * 真实对象 & 代理对象 都必须要 implements 同一个Interface
 *
 * 好处：
 *  1、【代理对象】，可以做很多【真实对象】不能做的事情
 *  2、【真实对象】，专注于做【自己的事情】
 *
 * */
public class t7_thread_staticProxy {
    public static void main(String[] args) {

        You you = new You();

        // 回顾多线程使用
//        new Thread( () -> {
//            System.out.println("我爱你");
//        }  ).start();

        new WeddingCompany(you).HappyMarry();
    }
}

interface Marry {

    // 开心结婚
    void HappyMarry();

}

// 1、真实角色
class You implements Marry {

    @Override
    public void HappyMarry() {
        System.out.println("Ni 要结婚了...");
    }

}

// 2、代理角色
class WeddingCompany implements Marry {

    // 代理 -> 真实目标角色
    private Marry marry;

    public WeddingCompany(Marry marry) {
        this.marry = marry;
    }

    // 代理 Method
    @Override
    public void HappyMarry() {
        before(); // 结婚之前
        this.marry.HappyMarry();
        after(); // 结婚之后

    }

    private void before() {
        System.out.println("结婚之前，布置thread...");
    }

    private void after() {
        System.out.println("结婚之后，补尾款...");
    }

}
